using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Common;
using Marlimer.Common.Entidades;
using Marlimer.Logical.Comercial;
using Marlimer.Logical.Universal;

namespace Marlimer.Comercial.Mantenimientos
{
    public partial class frm_Ruta : Form
    {
        lcom_Ruta lcom_ruta = new lcom_Ruta();
        lcom_Zona lcom_zona = new lcom_Zona();
        lcom_Vendedor lcom_vendedor = new lcom_Vendedor();
 
        List<itemsGrilla> itemsGrid = new List<itemsGrilla>(); 

        public frm_Ruta()
        {
            InitializeComponent();
        }

        private void frm_UnidadMedida_Load(object sender, EventArgs e)
        {
            itemsGrid.Add(new itemsGrilla("ccod_zona", "Zona", 40, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cnom_zona", "Descrip. Zona", 90, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("ccod_ruta", "Zona", 40, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cnom_ruta", "Descripcion", 90, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("vendedor", "Vendedor", 160, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("cstatus", "Estado", 45, true, true, DataGridViewContentAlignment.MiddleCenter));

            this.Location = new Point(0, 0);
            configurarRejilla();
            cargarCombos();
            refreshRejilla(0,0,0, "");
        }

        private void cargarCombos()
        {
            Util.LlenarDataCombo(lcom_zona.getDTZona(), cboZona, true);
            Util.LlenarDataCombo(lcom_vendedor.getDTVendedor(), cboVendedor, true);
        }

        private void refreshRejilla(int ccod_ruta, int ccod_zona, int ccod_vend, String cnom_ruta)
        {
            gridResultados.DataSource = null;
            int flg_anulados = 0;
            if (chkAnulados.Checked)
            {
                flg_anulados = 1;
            }
            DataTable dt = lcom_ruta.consultaRuta(ccod_ruta, ccod_zona, ccod_vend, cnom_ruta, flg_anulados);
            if (dt != null)
            {
                gridResultados.DataSource = dt;
                Util.setRejillaColumns(gridResultados, itemsGrid);
            }
        }

        private void configurarRejilla()
        {
            gridResultados.Columns.Clear();
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Zona", 40, true, true, DataGridViewContentAlignment.MiddleRight));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Descrip. Zona", 90, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Descripcion", 90, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Vendedor", 160, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Estado", 45, true, true, DataGridViewContentAlignment.MiddleCenter));

            gridResultados.AllowUserToResizeRows = false;
            gridResultados.RowHeadersVisible = false;
            gridResultados.AllowUserToAddRows = false;
            gridResultados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }

        private void txtGeneralNombres_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.KeyChar = Convert.ToChar(e.KeyChar.ToString().ToUpper());
            e.Handled = Util.validaTecla(e.KeyChar, "Direccion", ((TextBox)sender).Text, true);
        }

        private void txtGeneralSelect_Enter(object sender, EventArgs e)
        {
            Util.selectAllText(((TextBox)sender));
        }

        private void cboGeneralDT_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cbo = (ComboBox)sender;
            String valor = "";
            String namecbo = cbo.Name;
            //validamos que el indice seleccionado sea mayor a -1
            if (cbo.SelectedIndex > -1 && cbo.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                valor = Convert.ToString(cbo.SelectedValue);
            }

            switch (namecbo)
            {
                case "cboZona":
                    {
                        txtCodZona.Text = valor;
                        if (Util.ToValor(valor) > 0)
                        {
                            //consulta la ruta
                            DataTable dt = lcom_zona.consultaZona(Convert.ToInt32(valor),0,"",0);
                            if (dt.Rows.Count > 0)
                            {
                                txtSupervisor.Text = Convert.ToString(Util.getValueDT("supervisor", 0, dt));
                            }
                        }
                        else
                        {
                            txtSupervisor.Text = ""; 
                        }
                        break;
                    }
                case "cboVendedor":
                    {
                        txtCodVendedor.Text = valor;
                        break;
                    }
            }
        }

        private void txtGeneral_Leave(object sender, EventArgs e)
        {
            TextBox txt = (TextBox)sender;
            String value = "";
            int valuenum = -1;
            String nametxt = txt.Name;
            object newval = null;

            if (txt.Text.Trim() != "")
            {
                value = txt.Text;
                valuenum = Convert.ToInt32(Util.ToValor(txt.Text));
            }

            switch (nametxt)
            {
                case "txtCodZona":
                    {
                        cboZona.SelectedValue = valuenum;
                        newval = cboZona.SelectedValue;
                        break;
                    }
                case "txtCodVendedor":
                    {
                        cboVendedor.SelectedValue = valuenum;
                        newval = cboVendedor.SelectedValue;  
                        break;
                    }
            }
            txt.Text = Convert.ToString(newval);
        }

        private void txtGeneralEntero_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = Util.validaTecla(e.KeyChar, "Entero", ((TextBox)sender).Text, true);
        }

        private void cboGeneral_KeyPress(object sender, KeyPressEventArgs e)
        {
            Util.limpiaDT(cboZona, e.KeyChar);   
            Util.validaEnter(e.KeyChar);
        }

        private void genComandos_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            //segun el tag se realiza la accion
            String com = e.ClickedItem.Tag.ToString();
            switch (com)
            {
                case "N":       //nuevo
                    {
                        nuevo();
                        break;
                    }
                case "G":
                    {
                        if (validarRuta())
                        {
                            if (validarCampos())
                            {
                                guardar();
                            }
                        }
                        break;
                    }
                case "A":
                    {
                        if (anular(Convert.ToInt32(Util.ToValor(txtCodigo.Text))))
                        {
                            backState();
                        }
                        break;
                    }
                case "B":
                    {
                        buscar();
                        break;
                    }
            }
        }

        private void buscar()
        {
            refreshRejilla(Convert.ToInt32(Util.ToValor(txtCodigo.Text)), Convert.ToInt32(cboZona.SelectedValue), Convert.ToInt32(cboVendedor.SelectedValue), txtNomRuta.Text);
        }

        private void guardar()
        {
            //verificamos si desea guardar para poder anular la guardada
            DialogResult resp = MessageBox.Show("Seguro que desea guardar el registro?", this.Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

            switch (resp)
            {

                case DialogResult.Yes:
                    {
                        InfoRuta ruta = new InfoRuta();

                        //verificamos si es actualizar
                        if (!txtCodigo.ReadOnly)
                        {
                            ruta.cmodo = 1;  //nuevo
                        }
                        else
                        {
                            ruta.cmodo = 2;   //actualizar
                        }

                        ruta.ccod_ruta = Convert.ToInt32(txtCodigo.Text);
                        ruta.cnom_ruta = txtNomRuta.Text;
                        ruta.ccod_zona = Convert.ToInt32(cboZona.SelectedValue);
                        ruta.ccod_vend = Convert.ToInt32(cboVendedor.SelectedValue);
                        ruta.cstatus = "";

                        resulMsgError resul = lcom_ruta.guardar(ruta);

                        if (resul.resul)
                        {
                            MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            backState();
                        }
                        else
                        {
                            MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        break;
                    }
                case DialogResult.Cancel:
                    {
                        backState();
                        break; 
                    }

            }
        }

        private void backState()
        {
            txtCodigo.ReadOnly = false; 
            txtCodigo.Text = "";
            txtSupervisor.Text = "";
            txtNomRuta.Text = "";
            
            gridResultados.Enabled = true;
            chkAnulados.Enabled = true;  

            tlbAnular.Enabled = false;
            tlbGuardar.Enabled = false;
            tlbNuevo.Enabled = true;
            tlbBuscar.Enabled = true; 

            mnuAnular.Enabled = false;
            mnuGuardar.Enabled = false;
            mnuNuevo.Enabled = true;
            mnuBuscar.Enabled = true;
            lblMensaje.Visible = false;
            lblStatus.Visible = false; 
            refreshRejilla(0,0, 0,"");
            cargarCombos(); 
            panDetalles.Enabled = true; 
        }

        private Boolean anular(int ccod_ruta)
        {
            InfoRuta ruta = new InfoRuta();

            ruta.ccod_ruta = ccod_ruta;
            ruta.cnom_ruta = "";            
            //verificar si ya ha sido anulado
            if (lblStatus.Text == "ANULADO")
            {
                if (MessageBox.Show("El registro ya se encuentra anulado, desea activarlo?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    ruta.cstatus = "A";
                    ruta.cmodo = 3;
                    resulMsgError resul = lcom_ruta.guardar(ruta);
                    if (resul.resul)
                    {
                        MessageBox.Show("Registro activado satisfactoriamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return resul.resul;
                    }
                    else
                    {
                        MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return resul.resul;
                    }
                }
                else
                {
                    return false;
                }
            }
            else
            {
                ruta.cstatus = "D";
                ruta.cmodo = 3;
                resulMsgError resul = lcom_ruta.guardar(ruta);
                if (resul.resul)
                {
                    MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return resul.resul;
                }
                else
                {
                    MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return resul.resul;
                }
            }
        }

        private void nuevo()
        {
            cargarCombos(); 
            gridResultados.Enabled = false;
            chkAnulados.Enabled = false; 
            tlbGuardar.Enabled = true;
            tlbAnular.Enabled = false;
            mnuGuardar.Enabled = true;
            mnuAnular.Enabled = false;

            tlbNuevo.Enabled = false;
            mnuNuevo.Enabled = false;
            tlbBuscar.Enabled = false;
            mnuBuscar.Enabled = false;
 
            txtSupervisor.Text = "";
            txtCodigo.Text = "";
            txtNomRuta.Text = ""; 
            lblStatus.Visible = false;
            lblMensaje.Visible = true;
            txtCodigo.ReadOnly = false;
            txtCodigo.Focus(); 
            //Util.readOnlyInForm(panDetalles, true);
        }

        private bool validarCampos()
        {
            String msj = "";
            Boolean resul = true;
            //verificamos que cada campo tenga un valor 
            if (txtCodigo.Text.Trim() == "")
            {
                msj = "Ingrese el codigo de la ruta"; 
            }

            if (cboZona.SelectedIndex < 0 && msj == "")
            {
                msj = "Seleccione la Zona";
            }

            if (cboVendedor.SelectedIndex < 0 && msj == "")
            {
                msj = "Seleccione el Vendedor";
            }

            if (txtNomRuta.Text.Trim() == "" && msj == "")
            {
                msj = "Ingrese la descripcion de la Ruta";
            }


            //si el msj tiene un contenido
            if (msj != "")
            {
                resul = false;
                MessageBox.Show(msj, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            return resul;
        }


        private void gridResultados_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            //validar el formato para anulados
            if (Convert.ToString(gridResultados.Rows[e.RowIndex].Cells["cstatus"].Value) == "D")
            {
                gridResultados.Rows[e.RowIndex].DefaultCellStyle.ForeColor = System.Drawing.Color.Red;
            }
        }

        private void gridResultados_DoubleClick(object sender, EventArgs e)
        {
            //validar de que este una fila seleccionada para el doble click
            if (gridResultados.CurrentRow != null)
            {
                txtCodigo.Text = Convert.ToString(gridResultados.CurrentRow.Cells["ccod_ruta"].Value);
                txtNomRuta.Text = Convert.ToString(gridResultados.CurrentRow.Cells["cnom_ruta"].Value);
                cboZona.SelectedValue = Convert.ToInt32(gridResultados.CurrentRow.Cells["ccod_zona"].Value);
                cboVendedor.SelectedValue = Convert.ToInt32(gridResultados.CurrentRow.Cells["ccod_vend"].Value);
                String cstatus = Convert.ToString(gridResultados.CurrentRow.Cells["cstatus"].Value);
                gridResultados.Enabled = false;
                lblStatus.Visible = true;
                //activar el modo edicion // activar guardar// desactivar grilla //activar anular
                txtCodigo.ReadOnly = true; 
                if (cstatus == "A")     //activo
                {
                    tlbGuardar.Enabled = true;
                    mnuGuardar.Enabled = true;
                    lblStatus.Text = "ACTIVO";
                    lblStatus.ForeColor = System.Drawing.Color.Blue;
                }
                else
                {
                    lblStatus.Text = "ANULADO";
                    lblStatus.ForeColor = System.Drawing.Color.Red;
                    panDetalles.Enabled = false;
                    txtCodigo.Focus();  
                }
               
                tlbAnular.Enabled = true;
                mnuAnular.Enabled = true;
                tlbNuevo.Enabled = false;
                mnuNuevo.Enabled = false;
                tlbBuscar.Enabled = false;
                mnuBuscar.Enabled = false; 
 
                
                lblMensaje.Visible = true; 
                //Util.readOnlyInForm(panDetalles, false);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (lblMensaje.Visible)
            {
                backState(); 
            }
        }


        private Boolean validarRuta()
        {
            Boolean res = true;
            //para validar el codigo no debe estar en readonly ademas de estar en modo edicion
            if (txtCodigo.Text.Trim() != "" && !txtCodigo.ReadOnly && tlbGuardar.Enabled)
            {
                DataTable dt = lcom_ruta.consultaRuta(Convert.ToInt32(txtCodigo.Text), 0, 0, "", 0);
                if (dt.Rows.Count > 0)
                {
                    MessageBox.Show("El codigo de ruta ingresado ya existe, intente con otro codigo.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    res = false;
                }
            }
            return res;
        }

        private void txtCodigo_Validating(object sender, CancelEventArgs e)
        {
            if (!validarRuta())
            {
                e.Cancel = true;
            }
        }

        private void chkAnulados_CheckedChanged(object sender, EventArgs e)
        {
            buscar(); 
        }




    }
}